package com.labofjet.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.util.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.labofjet.bean.BaseEnum;

/**
 * 针对BaseEnum的强化
 * 
 * @author jyzjyz12@163.com
 * 
 */
public class BaseEnumUtils {
    private static final Logger LOGGER = LoggerFactory.getLogger(BaseEnumUtils.class);

    //    private static final String GET_CODE_METHOD_NAME = "getCode";
    //    private static final String GET_TEXT_METHOD_NAME = "getText";

    private BaseEnumUtils() {

    }

    /**
     * 通过给定的enum.class类型返回所有这个enum下定义的枚举实例
     * 
     * @param enumObjectClass
     * @return
     */
    public static <T> List<T> getAllEnumInstanceByClass(Class<T> enumObjectClass) {
        return new ArrayList<T>(Arrays.asList(enumObjectClass.getEnumConstants()));
    }

    /**
     * 取得class和code为给定值的枚举类实例
     * @param enumObjectClass
     * @param code
     * @return
     */
    public static <T extends BaseEnum> T getEnumInstanceByClassAndCode(Class<T> enumObjectClass, String code) {
        if (StringUtils.isEmpty(code)) {//code为空
            LOGGER.error("传入的Code为空. Code={}", code);
            return null;
        }
        List<T> enumObjectList = getAllEnumInstanceByClass(enumObjectClass);
        if (CollectionUtils.isEmpty(enumObjectList)) {//给定的class可能不是enum
            LOGGER.error("给定class的enum对象为空");
            return null;
        }
        for (T t : enumObjectList) {//遍历所有enum对象,找到code和给定值相同的enum对象
            if (code.equals(t.getCode())) {
                return t;
            }
        }
        return null;
    }
    
    /**
     * 取得class和text为给定值的枚举类实例
     * @param enumObjectClass
     * @param text
     * @return
     */
    public static <T extends BaseEnum> T getEnumInstanceByClassAndText(Class<T> enumObjectClass, String text) {
        if (StringUtils.isEmpty(text)) {//text为空
            LOGGER.error("传入的text是empty. Code={}", text);
            return null;
        }
        List<T> enumObjectList = getAllEnumInstanceByClass(enumObjectClass);
        if (CollectionUtils.isEmpty(enumObjectList)) {//给定的class可能不是enum
            LOGGER.error("给定class的enum对象为空");
            return null;
        }
        for (T t : enumObjectList) {//遍历所有enum对象,找到text和给定值相同的enum对象
            if (text.equals(t.getText())) {
                return t;
            }
        }
        return null;
    }
}
